package com.example.dao;

import com.example.entity.AdminInfo;
import com.example.vo.AdminInfoVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;

/**
 * 管理员信息数据访问层接口
 * 主要职责：
 * 1. 管理系统管理员账户信息（含基础信息/权限等级/安全凭证等）
 * 2. 提供管理员检索与统计能力（支持模糊查询/精确查询）
 * 3. 实现账号唯一性校验等安全相关操作（防止重复注册/编辑冲突）
 * 4. 维护管理员与系统权限的关联关系（通过AdminInfoVo扩展字段）
 */

@Repository
public interface AdminInfoDao extends Mapper<AdminInfo> {

    /**
     * 条件查询管理员列表（支持模糊搜索）
     *
     * @param name 查询条件：
     *             - 模糊匹配用户名（like %value% 查询）
     *             - 传 "all" 时查询全部记录
     * @return {@link List<AdminInfoVo>} 管理员信息视图对象列表（包含权限等级等扩展信息）
     *
     * @implNote 对应XML中的<select id="findByName">实现，默认按ID升序排列
     */
    List<AdminInfoVo> findByName(@Param("name") String name);

    /**
     * 字段唯一性校验（用于注册/编辑场景的唯一性验证）
     *
     * @param column 要校验的字段名（如：name/phone/email）
     * @param value  要校验的字段值
     * @param id     排除校验的记录ID（编辑场景使用，避免与自身重复）
     * @return int 重复记录数（0-无重复，1-已存在）
     *
     * @implNote 对应XML中的<select id="checkRepeat">实现
     * @security 注意${column}的SQL注入风险，需确保参数来源可信
     */
    int checkRepeat(@Param("column") String column,
                    @Param("value") String value,
                    @Param("id") Long id);

    /**
     * 通过用户名精确查询管理员信息
     *
     * @param username 管理员登录账号（唯一标识）
     * @return {@link AdminInfoVo} 管理员信息视图对象（包含密码等完整信息）
     *
     * @implNote 对应XML中的<select id="findByUsername">实现，用于登录验证场景
     */
    AdminInfoVo findByUsername(String username);

    /**
     * 统计管理员总数
     *
     * @return {@link Integer} 管理员记录总数（包含已删除标记的记录）
     *
     * @implNote 对应XML中的<select id="count">实现，用于系统监控面板展示
     */
    Integer count();
}